As more digital content becomes available on the Internet, peer-to-peer (p2p) networks have been developed to distribute it. Without access to a p2p network, users may be required to download content from a single web server. To provide a satisfactory user experience, the web server must have sufficient bandwidth to send the file to all users within an acceptable time frame. As the number of simultaneous users grows, however, bandwidth costs can become prohibitively expensive. P2p networks, on the other hand, rely upon the bandwidth and computing power of all the clients of the p2p network to distribute files, rather than the bandwidth of a single web server. As a result, bandwidth requirements for a particular web server can be greatly diminished.
Unfortunately, p2p networks can become quite inefficient. Generally, the networks work by splitting the file to be distributed into segments. These file segments may then be distributed among the clients of the p2p network. As new users log onto the system, they can retrieve the file segments from various other p2p network clients. Because p2p network clients are constantly joining and leaving the network, however, the particular file segments that are available for download are constantly changing, as is the number of p2p clients that can provide those file segments. As a result, some file segments may only be available from a small number of p2p clients—greatly diminishing network performance—or may, in fact, become totally unavailable. When the file segments of a particular file are evenly distributed among the peers of a p2p network, the p2p network is said to have high peer efficiency; conversely, when the file segments of a particular file are unevenly distributed among the peers of a p2p network or unavailable, the p2p network is said to have low peer efficiency.